package drive.Controller;

import drive.Model.User;
import drive.Service.ServiceInterface.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;
//已经进行初步测试，2025.3.16，如存在细小bug请随时联系后端牛马
@RestController
@RequestMapping("/users")
public class LoginController {

    @Autowired
    private LoginService loginService; // 注入LoginService

    // 创建用户
    //    请求方法：POST
//    URL：http://localhost:8080/users
//    请求头：Content-Type: application/json
//    请求体：
//    JSON
//    {
//        "username": "testUser",
//            "password": "123456",
//            "email": "test@example.com"
//    }
//    预期响应：
//    JSON
//    {
//        "status": 200,
//            "message": "User created successfully with ID: 1"
//    }
    @PostMapping
    public String createUser(@RequestBody User user) {
        user.setCreateTime(new Date());
        user.setStatus(User.Status.normal);
        String msg = loginService.createUser(user);
        return msg;
    }

    // 根据ID获取用户


//    请求方法：GET
//    URL：http://localhost:8080/users/1
//    预期响应：
//    JSON
//    {
//        "userID": 1,
//            "username": "testUser",
//            "password": "123456",
//            "email": "test@example.com",
//            "creditScore": 0,
//            "createTime": "2022-01-01T12:00:00",
//            "status": "NORMAL"
//    }
    @GetMapping("/{userID}")
    public User getUserById(@PathVariable int userID) {
        return loginService.getUserById(userID);
    }

    // 获取所有用户

//    获取所有用户接口
//    请求方法：GET
//    URL：http://localhost:8080/users
//    预期响应：
//    JSON
//
//            [
//    {
//        "userID": 1,
//            "username": "testUser",
//            "password": "123456",
//            "email": "test@example.com",
//            "creditScore": 0,
//            "createTime": "2022-01-01T12:00:00",
//            "status": "NORMAL"
//    }
//]
    @GetMapping
    public List<User> getAllUsers() {
        return loginService.getAllUsers();
    }

    // 更新用户

//    请求方法：PUT
//    URL：http://localhost:8080/users/1
//    请求头：Content-Type: application/json
//    请求体：
//    JSON
//
//    {
//        "username": "updatedUser",
//            "password": "654321",
//            "email": "updated@example.com"
//    }
//    预期响应：
//    JSON
//
//    {
//        "status": 200,
//            "message": "User updated successfully"
//    }
    @PutMapping("/{userID}")
    public String updateUser(@PathVariable int userID, @RequestBody User user) {
        user.setUserID(userID);
        loginService.updateUser(user);
        return "User updated successfully";
    }

    // 删除用户

//    删除用户接口
//    请求方法：DELETE
//    URL：http://localhost:8080/users/1
//    预期响应：
//    JSON
//
//    {
//        "status": 200,
//            "message": "User deleted successfully"
//    }
    @DeleteMapping("/{userID}")
    public String deleteUser(@PathVariable int userID) {
        loginService.deleteUser(userID);
        return "User deleted successfully";
    }

    // 根据用户名获取用户

//    请求方法：GET
//    URL：http://localhost:8080/users/username/testUser
//    预期响应：
//    JSON
//
//    {
//        "userID": 1,
//            "username": "testUser",
//            "password": "123456",
//            "email": "test@example.com",
//            "creditScore": 0,
//            "createTime": "2022-01-01T12:00:00",
//            "status": "NORMAL"
//    }
    @GetMapping("/username/{username}")
    public User getUserByUsername(@PathVariable String username) {
        return loginService.getUserByUsername(username);
    }

    // 根据邮箱获取用户

//    根据邮箱获取用户接口
//    请求方法：GET
//    URL：http://localhost:8080/users/email/test@example.com
//    预期响应：
//    JSON
//
//    {
//        "userID": 1,
//            "username": "testUser",
//            "password": "123456",
//            "email": "test@example.com",
//            "creditScore": 0,
//            "createTime": "2022-01-01T12:00:00",
//            "status": "NORMAL"
//    }
    @GetMapping("/email/{email}")
    public User getUserByEmail(@PathVariable String email) {
        return loginService.getUserByEmail(email);
    }

    // 用户登录

//    用户登录接口
//    请求方法：POST
//    URL：http://localhost:8080/users/login
//    请求参数：
//    username: testUser
//    password: 123456
//    预期响应：
//    JSON
//            复制
//    {
//        "userID": 1,
//            "username": "testUser",
//            "password": "123456",
//            "email": "test@example.com",
//            "creditScore": 0,
//            "createTime": "2022-01-01T12:00:00",
//            "status": "NORMAL"
//    }
    @PostMapping("/login")
    public String login(@RequestBody User user) {
        return loginService.login(user.getUsername(), user.getPassword());
    }
}